/**
 * 作者: wgx
 * 日期: 2024-10-12 10:41:20
 * 备注: 用户扩展信息表（字段不能设置默认值，代码里设置）
 */
package com.motu.monstercity.server.game.userdata;

import com.motu.monstercity.protocol.Common.PBUserExtInfo;
import com.motu.vertx.module.utility.model.BaseModel;
import com.motu.vertx.module.utility.model.Model;
import io.vertx.core.json.JsonObject;
import io.vertx.core.json.JsonArray;

public class UserExtInfoModel extends BaseModel implements Model {
	public static final String LISTKEY = "";
	public static final int REDIS_EXPIRE_TIME = 0;// redis过期时间
	public static final int UPDATE_DB_TYPE = UPDATE_DB_TYPE_QUEUE;// 数据入库类型 队列入库
	public static final boolean ORDER_LIST = false;// 是否需要额外的有序列表

	protected long id; // 用户ID
	protected int serverId; // 注册时的服务器id (合服也不变)
	protected String accountId = ""; // 账号id
	protected int accountType; // 帐号类型 (1-魔兔帐号 2-微信 3-QQ 4-gamecenter 5-google)
	protected int platform; // 平台号
	protected long channel; // 子渠道
	protected int iapBuy; // iap购买数额
	protected long chargeTime; // 上次充值时间
	protected int diamondCharge; // 充值钻石
	protected int diamondFree; // 免费钻石
	protected byte status; // 状态
	protected String mac = ""; // mac
	protected String ip = ""; // ip
	protected String udid = ""; // udid
	protected long registerTime; // 注册时间
	protected int loginCount; // 登录总次数
	protected int loginDayCount; // 登录天数
	protected byte bindAccount; // 是否绑定账号
	protected int teachId; // 教学id
	protected String moduleEnter = ""; // 已进入过的模块列表
	protected long offlineTime; // 最后离线时间
	protected String mobId = ""; // mob推送sdk的id
	protected String deviceId = ""; // 设备id (IOS：内容填写idfa的值。Android：内容填写imei的值，无则填写anroidid的值取值)
	protected String idfa = ""; // _idfa (IOS必填 广告标示符)
	protected String idfv = ""; // _idfv (IOS必填 Vindor标示符)
	protected String imei = ""; // _imei (Android必填 手机唯一识别码)
	protected String androidId = ""; // _androidid (Android必填 )
	protected String ryDeviceType = ""; // 设备类型 (如iphone5s、sansung-GT9300)
	protected String ryOs = ""; // 系统类型 (设备是Android还是ios系统)
	protected String clientVersion = ""; // 客户端版本号
	protected String distinctId = ""; // 数数sdk账号id
	protected String timezone = ""; // 时区
	protected byte isGm; // 是否gm (0:否 1:是)
	protected long bannedTime; // 角色的封号结束时间
	protected long sealTime; // 角色的禁言结束时间
	protected long chatTime; // 最后一次发言时间
	protected long resetTime; // 每日重置时间
	protected int dayIapBuy; // 每日iap购买数额
	protected byte language; // 语言类型
	protected String fcmToken = ""; // fcm_token
	protected String loginAccountId = ""; // 登陆账号ID (第三方登陆填写第三方账号ID)
	protected int loginAccountType; // 登陆账号类型 (第三方登陆填写第三方账号ID)
	protected String packageVersion = ""; // 客户端整包版本号

	public void reset() {
	}

	protected String getKey() {
		return "UserExtInfo." + id;
	}

	protected String getListKey() {
		return null;
	}

	protected String getListItemKey() {
		return null;
	}

	public void doCreate() {
		setTableId();
		insert();
	}

	public void setTableId() {
		putId(incrTableId("user_ext_info"));
	}

	public JsonObject insert() {
		return super.insert(getKey(), id, REDIS_EXPIRE_TIME, UPDATE_DB_TYPE, LISTKEY, getListKey(), getListItemKey(), ORDER_LIST);
	}

	public void delete() {
		super.delete(getKey(), id, UPDATE_DB_TYPE, id, LISTKEY, getListKey(), getListItemKey(), ORDER_LIST);
	}

	/**
	 * 根据入库类型更新
	 */
	public JsonObject update() {
		return super.update(getKey(), id, REDIS_EXPIRE_TIME, UPDATE_DB_TYPE, id, getAllObj(), LISTKEY, getListKey(), getListItemKey());
	}

	/**
	 * 实时入库
	 */
	public JsonObject updateNow() {
		return super.update(getKey(), id, REDIS_EXPIRE_TIME, UPDATE_DB_TYPE_NOW, 0, getAllObj(), LISTKEY, getListKey(), getListItemKey());
	}

	/**
	 * 实时入队列
	 */
	public JsonObject updateQueueNow() {
		return super.update(getKey(), id, REDIS_EXPIRE_TIME, UPDATE_DB_TYPE, 0, getAllObj(), LISTKEY, getListKey(), getListItemKey());
	}

	public JsonObject getAllObj(){
		JsonObject obj = new JsonObject();
		obj.put("id", id); // 用户ID
		obj.put("serverId", serverId); // 注册时的服务器id (合服也不变)
		obj.put("accountId", accountId); // 账号id
		obj.put("accountType", accountType); // 帐号类型 (1-魔兔帐号 2-微信 3-QQ 4-gamecenter 5-google)
		obj.put("platform", platform); // 平台号
		obj.put("channel", channel); // 子渠道
		obj.put("iapBuy", iapBuy); // iap购买数额
		obj.put("chargeTime", chargeTime); // 上次充值时间
		obj.put("diamondCharge", diamondCharge); // 充值钻石
		obj.put("diamondFree", diamondFree); // 免费钻石
		obj.put("status", status); // 状态
		obj.put("mac", mac); // mac
		obj.put("ip", ip); // ip
		obj.put("udid", udid); // udid
		obj.put("registerTime", registerTime); // 注册时间
		obj.put("loginCount", loginCount); // 登录总次数
		obj.put("loginDayCount", loginDayCount); // 登录天数
		obj.put("bindAccount", bindAccount); // 是否绑定账号
		obj.put("teachId", teachId); // 教学id
		obj.put("moduleEnter", moduleEnter); // 已进入过的模块列表
		obj.put("offlineTime", offlineTime); // 最后离线时间
		obj.put("mobId", mobId); // mob推送sdk的id
		obj.put("deviceId", deviceId); // 设备id (IOS：内容填写idfa的值。Android：内容填写imei的值，无则填写anroidid的值取值)
		obj.put("idfa", idfa); // _idfa (IOS必填 广告标示符)
		obj.put("idfv", idfv); // _idfv (IOS必填 Vindor标示符)
		obj.put("imei", imei); // _imei (Android必填 手机唯一识别码)
		obj.put("androidId", androidId); // _androidid (Android必填 )
		obj.put("ryDeviceType", ryDeviceType); // 设备类型 (如iphone5s、sansung-GT9300)
		obj.put("ryOs", ryOs); // 系统类型 (设备是Android还是ios系统)
		obj.put("clientVersion", clientVersion); // 客户端版本号
		obj.put("distinctId", distinctId); // 数数sdk账号id
		obj.put("timezone", timezone); // 时区
		obj.put("isGm", isGm); // 是否gm (0:否 1:是)
		obj.put("bannedTime", bannedTime); // 角色的封号结束时间
		obj.put("sealTime", sealTime); // 角色的禁言结束时间
		obj.put("chatTime", chatTime); // 最后一次发言时间
		obj.put("resetTime", resetTime); // 每日重置时间
		obj.put("dayIapBuy", dayIapBuy); // 每日iap购买数额
		obj.put("language", language); // 语言类型
		obj.put("fcmToken", fcmToken); // fcm_token
		obj.put("loginAccountId", loginAccountId); // 登陆账号ID (第三方登陆填写第三方账号ID)
		obj.put("loginAccountType", loginAccountType); // 登陆账号类型 (第三方登陆填写第三方账号ID)
		obj.put("packageVersion", packageVersion); // 客户端整包版本号
		return obj;
	}

	public PBUserExtInfo.Builder takeInitBuilder() {
		PBUserExtInfo.Builder sb = PBUserExtInfo.newBuilder();
		if (chargeTime != 0) {
			sb.setChargeTime(chargeTime);
		}
		if (diamondCharge != 0) {
			sb.setDiamondCharge(diamondCharge);
		}
		if (registerTime != 0) {
			sb.setRegisterTime(registerTime);
		}
		if (loginDayCount != 0) {
			sb.setLoginDayCount(loginDayCount);
		}
		if (teachId != 0) {
			sb.setTeachId(teachId);
		}
		if (this.moduleEnter != null && this.moduleEnter.length() > 0) {
			JsonArray list = new JsonArray(this.moduleEnter);
			for(int i=0; i<list.size(); i++) {
				sb.addModuleEnter(list.getInteger(i));
			}
		}
		if (isGm != 0) {
			sb.setIsGm(isGm);
		}
		return sb;
	}

	public PBUserExtInfo.Builder takeBuilder() {
		if (updateObj == null || updateObj.isEmpty()) {
			return takeInitBuilder();
		}
		PBUserExtInfo.Builder sb = PBUserExtInfo.newBuilder();
		if (isFieldUpdate("chargeTime")) {
			sb.setChargeTime(chargeTime);
		}
		if (isFieldUpdate("diamondCharge")) {
			sb.setDiamondCharge(diamondCharge);
		}
		if (isFieldUpdate("registerTime")) {
			sb.setRegisterTime(registerTime);
		}
		if (isFieldUpdate("loginDayCount")) {
			sb.setLoginDayCount(loginDayCount);
		}
		if (isFieldUpdate("teachId")) {
			sb.setTeachId(teachId);
		}
		if (isFieldUpdate("moduleEnter")) {
			if (this.moduleEnter != null && this.moduleEnter.length() > 0) {
				JsonArray list = new JsonArray(this.moduleEnter);
				for(int i=0; i<list.size(); i++) {
					sb.addModuleEnter(list.getInteger(i));
				}
				if (list.isEmpty()) {
					sb.clearModuleEnter();
				}
			} else {
				sb.clearModuleEnter();
			}
		}
		if (isFieldUpdate("isGm")) {
			sb.setIsGm(isGm);
		}
		return sb;
	}

	public long getId() {
		return id;
	}

	public void putId(long id) {
		if (this.id != id) {
			this.id = id;
			updateRedisHashField(getKey(), "id", this.id);
		}
	}

	public void addId(long value) {
		this.id += value;
		updateRedisHashField(getKey(), "id", this.id);
	}

	public int getServerId() {
		return serverId;
	}

	public void putServerId(int serverId) {
		if (this.serverId != serverId) {
			this.serverId = serverId;
			updateRedisHashField(getKey(), "serverId", this.serverId);
		}
	}

	public void addServerId(int value) {
		this.serverId += value;
		updateRedisHashField(getKey(), "serverId", this.serverId);
	}

	public String getAccountId() {
		return accountId;
	}

	public void putAccountId(String accountId) {
		if (!this.accountId.equals(accountId)) {
			this.accountId = accountId;
			updateRedisHashField(getKey(), "accountId", this.accountId);
		}
	}

	public int getAccountType() {
		return accountType;
	}

	public void putAccountType(int accountType) {
		if (this.accountType != accountType) {
			this.accountType = accountType;
			updateRedisHashField(getKey(), "accountType", this.accountType);
		}
	}

	public void addAccountType(int value) {
		this.accountType += value;
		updateRedisHashField(getKey(), "accountType", this.accountType);
	}

	public int getPlatform() {
		return platform;
	}

	public void putPlatform(int platform) {
		if (this.platform != platform) {
			this.platform = platform;
			updateRedisHashField(getKey(), "platform", this.platform);
		}
	}

	public void addPlatform(int value) {
		this.platform += value;
		updateRedisHashField(getKey(), "platform", this.platform);
	}

	public long getChannel() {
		return channel;
	}

	public void putChannel(long channel) {
		if (this.channel != channel) {
			this.channel = channel;
			updateRedisHashField(getKey(), "channel", this.channel);
		}
	}

	public void addChannel(long value) {
		this.channel += value;
		updateRedisHashField(getKey(), "channel", this.channel);
	}

	public int getIapBuy() {
		return iapBuy;
	}

	public void putIapBuy(int iapBuy) {
		if (this.iapBuy != iapBuy) {
			this.iapBuy = iapBuy;
			updateRedisHashField(getKey(), "iapBuy", this.iapBuy);
		}
	}

	public void addIapBuy(int value) {
		this.iapBuy += value;
		updateRedisHashField(getKey(), "iapBuy", this.iapBuy);
	}

	public long getChargeTime() {
		return chargeTime;
	}

	public void putChargeTime(long chargeTime) {
		if (this.chargeTime != chargeTime) {
			this.chargeTime = chargeTime;
			updateRedisHashField(getKey(), "chargeTime", this.chargeTime);
		}
	}

	public void addChargeTime(long value) {
		this.chargeTime += value;
		updateRedisHashField(getKey(), "chargeTime", this.chargeTime);
	}

	public int getDiamondCharge() {
		return diamondCharge;
	}

	public void putDiamondCharge(int diamondCharge) {
		if (this.diamondCharge != diamondCharge) {
			this.diamondCharge = diamondCharge;
			updateRedisHashField(getKey(), "diamondCharge", this.diamondCharge);
		}
	}

	public void addDiamondCharge(int value) {
		this.diamondCharge += value;
		updateRedisHashField(getKey(), "diamondCharge", this.diamondCharge);
	}

	public int getDiamondFree() {
		return diamondFree;
	}

	public void putDiamondFree(int diamondFree) {
		if (this.diamondFree != diamondFree) {
			this.diamondFree = diamondFree;
			updateRedisHashField(getKey(), "diamondFree", this.diamondFree);
		}
	}

	public void addDiamondFree(int value) {
		this.diamondFree += value;
		updateRedisHashField(getKey(), "diamondFree", this.diamondFree);
	}

	public byte getStatus() {
		return status;
	}

	public void putStatus(byte status) {
		if (this.status != status) {
			this.status = status;
			updateRedisHashField(getKey(), "status", this.status);
		}
	}

	public void addStatus(byte value) {
		this.status += value;
		updateRedisHashField(getKey(), "status", this.status);
	}

	public String getMac() {
		return mac;
	}

	public void putMac(String mac) {
		if (!this.mac.equals(mac)) {
			this.mac = mac;
			updateRedisHashField(getKey(), "mac", this.mac);
		}
	}

	public String getIp() {
		return ip;
	}

	public void putIp(String ip) {
		if (!this.ip.equals(ip)) {
			this.ip = ip;
			updateRedisHashField(getKey(), "ip", this.ip);
		}
	}

	public String getUdid() {
		return udid;
	}

	public void putUdid(String udid) {
		if (!this.udid.equals(udid)) {
			this.udid = udid;
			updateRedisHashField(getKey(), "udid", this.udid);
		}
	}

	public long getRegisterTime() {
		return registerTime;
	}

	public void putRegisterTime(long registerTime) {
		if (this.registerTime != registerTime) {
			this.registerTime = registerTime;
			updateRedisHashField(getKey(), "registerTime", this.registerTime);
		}
	}

	public void addRegisterTime(long value) {
		this.registerTime += value;
		updateRedisHashField(getKey(), "registerTime", this.registerTime);
	}

	public int getLoginCount() {
		return loginCount;
	}

	public void putLoginCount(int loginCount) {
		if (this.loginCount != loginCount) {
			this.loginCount = loginCount;
			updateRedisHashField(getKey(), "loginCount", this.loginCount);
		}
	}

	public void addLoginCount(int value) {
		this.loginCount += value;
		updateRedisHashField(getKey(), "loginCount", this.loginCount);
	}

	public int getLoginDayCount() {
		return loginDayCount;
	}

	public void putLoginDayCount(int loginDayCount) {
		if (this.loginDayCount != loginDayCount) {
			this.loginDayCount = loginDayCount;
			updateRedisHashField(getKey(), "loginDayCount", this.loginDayCount);
		}
	}

	public void addLoginDayCount(int value) {
		this.loginDayCount += value;
		updateRedisHashField(getKey(), "loginDayCount", this.loginDayCount);
	}

	public byte getBindAccount() {
		return bindAccount;
	}

	public void putBindAccount(byte bindAccount) {
		if (this.bindAccount != bindAccount) {
			this.bindAccount = bindAccount;
			updateRedisHashField(getKey(), "bindAccount", this.bindAccount);
		}
	}

	public void addBindAccount(byte value) {
		this.bindAccount += value;
		updateRedisHashField(getKey(), "bindAccount", this.bindAccount);
	}

	public int getTeachId() {
		return teachId;
	}

	public void putTeachId(int teachId) {
		if (this.teachId != teachId) {
			this.teachId = teachId;
			updateRedisHashField(getKey(), "teachId", this.teachId);
		}
	}

	public void addTeachId(int value) {
		this.teachId += value;
		updateRedisHashField(getKey(), "teachId", this.teachId);
	}

	public JsonArray getModuleEnterArray() {
		if (this.moduleEnter != null && this.moduleEnter.length() > 0) {
			return new JsonArray(this.moduleEnter);
		} else {
			return new JsonArray();
		}
	}

	public String getModuleEnter() {
		return moduleEnter;
	}

	public void putModuleEnter(String moduleEnter) {
		if (!this.moduleEnter.equals(moduleEnter)) {
			this.moduleEnter = moduleEnter;
			updateRedisHashField(getKey(), "moduleEnter", this.moduleEnter);
		}
	}

	public long getOfflineTime() {
		return offlineTime;
	}

	public void putOfflineTime(long offlineTime) {
		if (this.offlineTime != offlineTime) {
			this.offlineTime = offlineTime;
			updateRedisHashField(getKey(), "offlineTime", this.offlineTime);
		}
	}

	public void addOfflineTime(long value) {
		this.offlineTime += value;
		updateRedisHashField(getKey(), "offlineTime", this.offlineTime);
	}

	public String getMobId() {
		return mobId;
	}

	public void putMobId(String mobId) {
		if (!this.mobId.equals(mobId)) {
			this.mobId = mobId;
			updateRedisHashField(getKey(), "mobId", this.mobId);
		}
	}

	public String getDeviceId() {
		return deviceId;
	}

	public void putDeviceId(String deviceId) {
		if (!this.deviceId.equals(deviceId)) {
			this.deviceId = deviceId;
			updateRedisHashField(getKey(), "deviceId", this.deviceId);
		}
	}

	public String getIdfa() {
		return idfa;
	}

	public void putIdfa(String idfa) {
		if (!this.idfa.equals(idfa)) {
			this.idfa = idfa;
			updateRedisHashField(getKey(), "idfa", this.idfa);
		}
	}

	public String getIdfv() {
		return idfv;
	}

	public void putIdfv(String idfv) {
		if (!this.idfv.equals(idfv)) {
			this.idfv = idfv;
			updateRedisHashField(getKey(), "idfv", this.idfv);
		}
	}

	public String getImei() {
		return imei;
	}

	public void putImei(String imei) {
		if (!this.imei.equals(imei)) {
			this.imei = imei;
			updateRedisHashField(getKey(), "imei", this.imei);
		}
	}

	public String getAndroidId() {
		return androidId;
	}

	public void putAndroidId(String androidId) {
		if (!this.androidId.equals(androidId)) {
			this.androidId = androidId;
			updateRedisHashField(getKey(), "androidId", this.androidId);
		}
	}

	public String getRyDeviceType() {
		return ryDeviceType;
	}

	public void putRyDeviceType(String ryDeviceType) {
		if (!this.ryDeviceType.equals(ryDeviceType)) {
			this.ryDeviceType = ryDeviceType;
			updateRedisHashField(getKey(), "ryDeviceType", this.ryDeviceType);
		}
	}

	public String getRyOs() {
		return ryOs;
	}

	public void putRyOs(String ryOs) {
		if (!this.ryOs.equals(ryOs)) {
			this.ryOs = ryOs;
			updateRedisHashField(getKey(), "ryOs", this.ryOs);
		}
	}

	public String getClientVersion() {
		return clientVersion;
	}

	public void putClientVersion(String clientVersion) {
		if (!this.clientVersion.equals(clientVersion)) {
			this.clientVersion = clientVersion;
			updateRedisHashField(getKey(), "clientVersion", this.clientVersion);
		}
	}

	public String getDistinctId() {
		return distinctId;
	}

	public void putDistinctId(String distinctId) {
		if (!this.distinctId.equals(distinctId)) {
			this.distinctId = distinctId;
			updateRedisHashField(getKey(), "distinctId", this.distinctId);
		}
	}

	public String getTimezone() {
		return timezone;
	}

	public void putTimezone(String timezone) {
		if (!this.timezone.equals(timezone)) {
			this.timezone = timezone;
			updateRedisHashField(getKey(), "timezone", this.timezone);
		}
	}

	public byte getIsGm() {
		return isGm;
	}

	public void putIsGm(byte isGm) {
		if (this.isGm != isGm) {
			this.isGm = isGm;
			updateRedisHashField(getKey(), "isGm", this.isGm);
		}
	}

	public void addIsGm(byte value) {
		this.isGm += value;
		updateRedisHashField(getKey(), "isGm", this.isGm);
	}

	public long getBannedTime() {
		return bannedTime;
	}

	public void putBannedTime(long bannedTime) {
		if (this.bannedTime != bannedTime) {
			this.bannedTime = bannedTime;
			updateRedisHashField(getKey(), "bannedTime", this.bannedTime);
		}
	}

	public void addBannedTime(long value) {
		this.bannedTime += value;
		updateRedisHashField(getKey(), "bannedTime", this.bannedTime);
	}

	public long getSealTime() {
		return sealTime;
	}

	public void putSealTime(long sealTime) {
		if (this.sealTime != sealTime) {
			this.sealTime = sealTime;
			updateRedisHashField(getKey(), "sealTime", this.sealTime);
		}
	}

	public void addSealTime(long value) {
		this.sealTime += value;
		updateRedisHashField(getKey(), "sealTime", this.sealTime);
	}

	public long getChatTime() {
		return chatTime;
	}

	public void putChatTime(long chatTime) {
		if (this.chatTime != chatTime) {
			this.chatTime = chatTime;
			updateRedisHashField(getKey(), "chatTime", this.chatTime);
		}
	}

	public void addChatTime(long value) {
		this.chatTime += value;
		updateRedisHashField(getKey(), "chatTime", this.chatTime);
	}

	public long getResetTime() {
		return resetTime;
	}

	public void putResetTime(long resetTime) {
		if (this.resetTime != resetTime) {
			this.resetTime = resetTime;
			updateRedisHashField(getKey(), "resetTime", this.resetTime);
		}
	}

	public void addResetTime(long value) {
		this.resetTime += value;
		updateRedisHashField(getKey(), "resetTime", this.resetTime);
	}

	public int getDayIapBuy() {
		return dayIapBuy;
	}

	public void putDayIapBuy(int dayIapBuy) {
		if (this.dayIapBuy != dayIapBuy) {
			this.dayIapBuy = dayIapBuy;
			updateRedisHashField(getKey(), "dayIapBuy", this.dayIapBuy);
		}
	}

	public void addDayIapBuy(int value) {
		this.dayIapBuy += value;
		updateRedisHashField(getKey(), "dayIapBuy", this.dayIapBuy);
	}

	public byte getLanguage() {
		return language;
	}

	public void putLanguage(byte language) {
		if (this.language != language) {
			this.language = language;
			updateRedisHashField(getKey(), "language", this.language);
		}
	}

	public void addLanguage(byte value) {
		this.language += value;
		updateRedisHashField(getKey(), "language", this.language);
	}

	public String getFcmToken() {
		return fcmToken;
	}

	public void putFcmToken(String fcmToken) {
		if (!this.fcmToken.equals(fcmToken)) {
			this.fcmToken = fcmToken;
			updateRedisHashField(getKey(), "fcmToken", this.fcmToken);
		}
	}

	public String getLoginAccountId() {
		return loginAccountId;
	}

	public void putLoginAccountId(String loginAccountId) {
		if (!this.loginAccountId.equals(loginAccountId)) {
			this.loginAccountId = loginAccountId;
			updateRedisHashField(getKey(), "loginAccountId", this.loginAccountId);
		}
	}

	public int getLoginAccountType() {
		return loginAccountType;
	}

	public void putLoginAccountType(int loginAccountType) {
		if (this.loginAccountType != loginAccountType) {
			this.loginAccountType = loginAccountType;
			updateRedisHashField(getKey(), "loginAccountType", this.loginAccountType);
		}
	}

	public void addLoginAccountType(int value) {
		this.loginAccountType += value;
		updateRedisHashField(getKey(), "loginAccountType", this.loginAccountType);
	}

	public String getPackageVersion() {
		return packageVersion;
	}

	public void putPackageVersion(String packageVersion) {
		if (!this.packageVersion.equals(packageVersion)) {
			this.packageVersion = packageVersion;
			updateRedisHashField(getKey(), "packageVersion", this.packageVersion);
		}
	}

}